#pragma once

#include <string>
#include <unordered_map>
#include <vector>

namespace yquote {

class ConfigManager {
public:
    ConfigManager();
    ~ConfigManager() = default;
    
    // 加载配置文件
    bool loadConfig(const std::string& config_file = "config/server.conf");
    
    // 获取配置值
    std::string getString(const std::string& section, const std::string& key, const std::string& default_value = "") const;
    int getInt(const std::string& section, const std::string& key, int default_value = 0) const;
    double getDouble(const std::string& section, const std::string& key, double default_value = 0.0) const;
    bool getBool(const std::string& section, const std::string& key, bool default_value = false) const;
    std::vector<std::string> getStringList(const std::string& section, const std::string& key, const std::vector<std::string>& default_value = {}) const;
    
    // 设置配置值
    void setString(const std::string& section, const std::string& key, const std::string& value);
    void setInt(const std::string& section, const std::string& key, int value);
    void setDouble(const std::string& section, const std::string& key, double value);
    void setBool(const std::string& section, const std::string& key, bool value);
    
    // 保存配置文件
    bool saveConfig(const std::string& config_file = "") const;
    
    // 打印所有配置
    void printConfig() const;
    
private:
    std::unordered_map<std::string, std::unordered_map<std::string, std::string>> config_;
    std::string config_file_path_;
    
    // 辅助函数
    std::string trim(const std::string& str) const;
    std::vector<std::string> split(const std::string& str, char delimiter) const;
};

} // namespace yquote 